"""
在这里添加各种自定义的断言，断言失败抛出AssertionError就OK。
"""
import json
from utils.log import logger


def assert_http_code(response, code_list=None):
    """
    断言：判断请求请求是否返回对应的响应码
    :param response:请求接口返回的数据
    :param code_list:预期响应编码，默认为200
    :return:
    """
    res_code = response.status_code
    if not code_list:
        code_list = [200]
    if res_code not in code_list:
        # 抛出AssertionError，unittest会自动判别为用例Failure，不是Error
        raise AssertionError('响应code不在列表中！ response:' + str(response.text))
    else:
        logger.info("响应code正确! code:" + str(res_code))


def assert_param_http_code(response, url, param=None, code_list=None):
    """
    断言：判断请求请求是否返回对应的响应码
    :param response: 请求接口返回的数据
    :param url: 请求地址
    :param param: 请求参数
    :param code_list: 预期响应编码，默认为200
    :return:
    """
    res_code = response.status_code
    if not code_list:
        code_list = [200]
    if res_code not in code_list:
        # 抛出AssertionError，unittest会自动判别为用例Failure，不是Error
        raise AssertionError(
            '响应code不在列表中！ code:' + str(res_code) + ' url:' + str(url) + " param:" + str(param))
    else:
        logger.info("响应code正确! code:" + str(res_code) + " url:" + str(url))


def assert_json_type(response):
    """
    断言：判断json数据格式是否返回success
    :param response:请求接口后返回的数据
    :return:
    """
    result_data = json.loads(response.text)
    result_type = result_data.get("type")
    if result_type != "success":
        raise AssertionError('return Message is Error response:' + str(response.text))
    else:
        logger.info("return Message is Success")


def assert_param_json_type(response, url, param=None, param_result=None):
    """
    断言：判断json数据格式是否符合要求
    :param response: 请求接口后返回的数据
    :param url: 请求地址
    :param param: 请求参数
    :param param_result: 请求接口后，预期结果参数
    :return:
    """
    if not param:
        param_result_type = param_result.get("type")
        if param_result_type:
            response_result_data = json.loads(response.text)
            response_result_type = response_result_data.get("type")
            if response_result_type != param_result_type:
                raise AssertionError('url:' + str(url) + " param:" + str(param) + " response:" + str(response.text))
            else:
                logger.info("return Message is Success. url:" + str(url) + " param:" + str(param))